package day20170427;

import java.lang.reflect.Field;

import org.junit.Test;

public class FieldTest {
	
	/**
	 * 使用反射，拿到属性
	 * @throws Exception
	 */
	@Test
	public void fieldTest() throws Exception {
		//拿到照妖镜
		Class clazz = Class.forName("day20170427.Student");
		//获取到学生对象
		Student student = (Student) clazz.newInstance();
		//获取到学生公共的属性
		Field[] fields = clazz.getFields();
		for(Field field : fields){
			//拿到属性的名字
			System.out.println(field.getName());
			//拿到属性的访问修饰符  0为默认  1为公共  2为私有
			System.out.println(field.getModifiers());
			//拿到属性的值
			System.out.println(field.get(student));
			
		}
		
		
		//指定拿到属性名字(只能拿到Public)
		Field field = clazz.getField("age");
		//拿到属性的名字
		System.out.println(field.getName());
		//拿到属性的访问修饰符  0为默认  1为公共  2为私有
		System.out.println(field.getModifiers());
		//拿到属性的值
		System.out.println(field.get(student));
		
		//拿到所有的属性包括private
		Field[] allFields = clazz.getDeclaredFields();
		for(Field allField : allFields){
			//打开private的访问权限
			allField.setAccessible(true);
			Object object = allField.get(student);
			System.out.println(object);
			//拿到属性的名字
			System.out.println(allField.getName());
			//拿到属性的访问修饰符  0为默认  1为公共  2为私有
			System.out.println(allField.getModifiers());
			//拿到属性的值
			System.out.println(allField.get(student));
		}
	}
}
